Calculate_SSOR_preconditioner Subroutine

public subroutine Calculate_SSOR_preconditioner(A, L, D, omega, alpha)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in), DIMENSION(:, :) :: A
real(kind=dp), intent(out), DIMENSION(SIZE(A, 1), SIZE(A, 2)) :: L
real(kind=dp), intent(out), DIMENSION(SIZE(A, 1), SIZE(A, 2)) :: D
real(kind=dp), intent(in) :: omega
real(kind=dp), intent(in) :: alpha

Source Code

    SUBROUTINE Calculate_SSOR_preconditioner(A, L, D, omega, alpha)
        REAL(dp), DIMENSION(:, :), INTENT(IN) :: A
        REAL(dp), INTENT(IN) :: omega, alpha
        REAL(dp), DIMENSION(SIZE(A, 1), SIZE(A, 2)), INTENT(OUT) :: L, D
        INTEGER :: N, i

        N = SIZE(A, 1)

        L = 0.d0
        D = 0.d0

        DO i = 1, SIZE(A,1)
            L(i,i) = 1.d0/omega * A(i,i)
            L(i,1:i-1) = A(i,1:i-1)
            
            D(i,i) = A(i,i)
        END DO

        L = (alpha * omega)/(2-omega) * L

    END SUBROUTINE Calculate_SSOR_preconditioner